package com.iotp.service.authority;


import com.iotp.entity.authority.Authority;

import java.util.List;

/**
 * 系统权限业务接口
 * @author Assassin
 */
public interface AuthorityService {

	// Methods

   /**
	* 添加系统根权限
	* @param orgId 标识信息-机构Id
	* @param orgCode 标识信息-机构编码
	* @param menuId 标识信息-菜单id
	* @param authorityName 基本信息-权限名称
	* @param authorityDesc 基本信息-权限说明
	* @param authorityKey 授权信息-权限标识
	* @param authorityUrl 授权信息-权限地址，多个地址使用逗号分隔
	* @return Long authorityId 添加后的数据库主键值
	*/
	public Long addRoot(Long orgId, String orgCode, Long menuId, String authorityName,
                        String authorityDesc, String authorityKey, String authorityUrl);
	
   /**
	* 添加系统子权限
	* @param authorityPid 层级信息-父级权限Id
	* @param orgId 标识信息-机构Id
	* @param orgCode 标识信息-机构编码
	* @param menuId 标识信息-菜单id
	* @param authorityName 基本信息-权限名称
	* @param authorityDesc 基本信息-权限说明
	* @param authorityKey 授权信息-权限标识
	* @param authorityUrl 授权信息-权限地址，多个地址使用逗号分隔
	* @return Long authorityId 添加后的数据库主键值
	*/
	public Long addSub(Long authorityPid, Long orgId, String orgCode, Long menuId, String authorityName,
                       String authorityDesc, String authorityKey, String authorityUrl);

   /**
	* 删除系统权限
	* @param authorityId 主键值
	*/
	public void delete(Long authorityId);

   /**
	* 更新系统权限
	* @param authorityId 标识信息-权限Id[主键值]
	* @param authoryityStatus 状态信息-权限数据状态
	* @param isDel 状态信息-是否删除[1-是 | 0-否]
	* @param authorityOrder 状态信息-权限排序
	* @param authorityName 基本信息-权限名称
	* @param authorityDesc 基本信息-权限说明
	* @param authorityKey 授权信息-权限标识
	* @param authorityUrl 授权信息-权限地址，多个地址使用逗号分隔
	*/
	public void edit(Long authorityId, Integer authoryityStatus, Integer isDel, Integer authorityOrder, String authorityName, String authorityDesc, String authorityKey, String authorityUrl);

   /**
	* 主键查询系统权限
	* @return Authority 实体
	*/
	public Authority queryById(Long authorityId);

   /**
	* 根据条件查询系统权限列表
	* @param authorityId 标识信息-权限Id[主键值]
	* @param authorityCode 标识信息-权限编码
	* @param authorityType 标识信息-权限类型
	* @param orgId 标识信息-机构Id
	* @param menuId 标识信息-菜单id
	* @param authoryityStatus 状态信息-权限数据状态
	* @param isDel 状态信息-是否删除[1-是 | 0-否]
	* @param authorityOrder 状态信息-权限排序
	* @param -authorityLeve 层级信息-权限层级
	* @param isParent 层级信息-是否父级
	* @param authorityPid 层级信息-父级Id
	* @param authorityName 基本信息-权限名称
	* @param authorityDesc 基本信息-权限说明
	* @param authorityKey 授权信息-权限标识
	* @param authorityUrl 授权信息-权限地址，多个地址使用逗号分隔
	* @param createTime 时间信息-创建时间
	* @param updateTime 时间信息-更新时间[初始化=NULL]
	* @return List<Authority> 实体List
	*/
	public List<Authority> queryList(Long authorityId, String authorityCode, Integer authorityType, Long orgId, Long menuId, Integer authoryityStatus, Integer isDel, Integer authorityOrder, Integer authorityLevel, Integer isParent, Long authorityPid, String authorityName, String authorityDesc, String authorityKey, String authorityUrl, Long createTime, Long updateTime);

	/**
	 * 编辑权限状态（逻辑删除 | 恢复）
	 * @param authorityId 权限Id
	 * @param isDel 是否删除状态
	 */
	public void editIsDel(Long authorityId, Integer isDel);
	
	/**
	 * 根据父Id查询子权限信息
	 * @param authorityPid 父权限Id
	 * @return List<Authority>
	 */
	public List<Authority> querySubList(Long authorityPid);
	
	/**
	 * 查询角色的权限
	 * @param roleId 角色Id
	 * @return List<Authority>
	 */
	public List<Authority> queryAuthorityByRoleId(Long roleId);
	
	/**
	 * 根据属性验证权限是否存在
	 * @param authorityId 权限Id
	 * @param authorityName 权限名称
	 * @param authorityUrl 权限地址
	 * @return List<Authority>
	 */
	public List<Authority> queryIsAuthorityExist(Long authorityId, String authorityName, String authorityUrl);
	
}